class Solution 
{
public:
    int lengthOfLongestSubstring(string s) 
    {
        int hash[128] = { 0 };  // 数组模拟哈希表

        int left = 0, right = 0, len_max = 0;
        int sz = s.size();
        while(right < sz)
        {
            ++hash[s[right]]; // 进入窗口

            while(hash[s[right]] > 1) --hash[s[left++]]; // 判断是否滑出窗口，即窗口内出现重复字符，从哈希表删除该字符

            len_max = max(len_max, right - left + 1);  // 有效窗口，更新结果

            ++right; // 下一个元素进入窗口
        }

        return len_max;
    }
};